package concesionaria;

import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.logging.ConsoleHandler;

public class Persona {

    private String dni;
    private String nombre;
    private String apellido;
    private String telefono;
    private String direccion;
    private String fecha_insc;
    private String tipo;
    private int numero = 0;

    public Persona() {
    }

    public int CargarDatos(String DNI, String Nombre, String Apellido, String Telefono, String Direccion, String tipo) {
        if (setDni(DNI) == false) {
            return 2;
        }
        if (setNombre(Nombre) == false) {
            return 3;
        }
        if (setApellido(Apellido) == false) {
            return 4;
        }
        if (setTelefono(Telefono) == false) {
            return 5;
        }
        if (setDireccion(Direccion) == false) {
            return 6;
        }
        if (setFecha_insc() == false) {
            return 7;
        }
        if (setTipo(tipo) == false) {
            return 8;
        }
        if (setNumero() == false) {
            return 1;
        }

        return 0;
    }

    public boolean AltaCliente() {
        if (comprobarDni(dni) && comprobarNombre(nombre) && comprobarDireccion(direccion) && comprobarApellido(apellido) && comprobarTelefono(telefono) && comprobarTipo(tipo) && numero != 0) {
            try {

                String SQL = "INSERT INTO `concesionaria`.`persona` (`ID`, `DNI`, `numero`, `nombre`, `apellido`, `telefono`, `direccion`, `fecha_insc`, `tipo`) VALUES (NULL, '"+dni+"', '"+numero+"', '"+nombre+"', '"+apellido+"', '"+telefono+"', '"+direccion+"', '"+fecha_insc+"', '"+tipo+"')";
                Statement stmt;
                stmt = DBCon.getConexion().createStatement();
                stmt.executeUpdate(SQL);
            } catch (SQLException e1) {
                System.out.println(e1.getMessage());
                return false;
            }
            return true;
        } else {
            return false;
        }
    }

    /**
     * @return the dni
     */
    private boolean comprobarDni(String dni) {
        if (dni.length() <= 9) {
            return true;
        } else {
            return false;
        }
    }

    public String getDni() {
        return dni;
    }

    /**
     * @param dni the dni to set
     */
    public boolean setDni(String dni) {
        if (comprobarDni(dni)) {
            this.dni = dni;
        } else {
            return false;
        }
        return true;
    }

    /**
     * @return the nombre
     */
    public boolean comprobarNombre(String nombre) {
        if (nombre.length() <= 30) {
            return true;
        } else {
            return false;
        }
    }

    public String getNombre() {
        return nombre;
    }

    /**
     * @param nombre the nombre to set
     */
    public boolean setNombre(String nombre) {
        if (comprobarNombre(nombre)) {
            this.nombre = nombre;
            return true;
        } else {
            return false;
        }
    }

    public boolean comprobarApellido(String apellido) {
        if (apellido.length() <= 30) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * @return the apellido
     */
    public String getApellido() {
        return apellido;
    }

    /**
     * @param apellido the apellido to set
     */
    public boolean setApellido(String apellido) {
        if (comprobarApellido(apellido)) {
            this.apellido = apellido;
            return true;
        } else {
            return false;
        }
    }

    /**
     * @return the telefono
     */
    public boolean comprobarTelefono(String telefono) {
        if (telefono.length() <= 15) {
            return true;
        } else {
            return false;
        }
    }

    public String getTelefono() {
        return telefono;
    }

    /**
     * @param telefono the telefono to set
     */
    public boolean setTelefono(String telefono) {
        if (comprobarTelefono(telefono)) {
            this.telefono = telefono;
            return true;
        } else {
            return false;
        }
    }

    public boolean comprobarDireccion(String direccion) {
        if (direccion.length() <= 50) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * @return the direccion
     */
    public String getDireccion() {
        return direccion;
    }

    /**
     * @param direccion the direccion to set
     */
    public boolean setDireccion(String direccion) {
        if (comprobarDireccion(direccion)) {
            this.direccion = direccion;
            return true;
        } else {
            return false;
        }
    }

    /**
     * @return the fecha_insc
     */
    public String getFecha_insc() {
        return fecha_insc;
    }

    /**
     * @param fecha_insc the fecha_insc to set
     */
    public boolean setFecha_insc() {
        java.util.Date fechaActual = new java.util.Date();
        SimpleDateFormat formato = new SimpleDateFormat("yyyy'-'MM'-'dd");
        String cadenaFecha = formato.format(fechaActual);
        this.fecha_insc = cadenaFecha;
        return true;
    }

    private boolean comprobarTipo(String tipo) {
        if ("cli".equals(tipo) || "emp".equals(tipo)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * @return the tipo
     */
    public String getTipo() {
        return tipo;
    }

    /**
     * @param tipo the tipo to set
     */
    public boolean setTipo(String tipo) {
        if (comprobarTipo(tipo)) {
            this.tipo = tipo;
            return true;
        } else {
            return false;
        }

    }

    private int fabricarNumero() {
        String SQL = "select count(*) from persona where tipo= '" + tipo + "'";
        Statement stmt;
        try {
            stmt = DBCon.getConexion().createStatement();
            ResultSet rs = stmt.executeQuery(SQL);
            while (rs.next()) {
                return rs.getInt(1) + 1;
            }
        } catch (SQLException e) {
            System.out.println(e.getMessage());
            return 0;
        }
        return 0;
    }

    /**
     * @return the numero
     */
    public int getNumero() {
        return numero;
    }

    /**
     * @param numero the numero to set
     */
    public boolean setNumero() {
        int num = fabricarNumero();
        if (numero == 0 && comprobarTipo(tipo) && num != 0) {
            this.numero = fabricarNumero();
            return true;
        } else {
            return false;
        }

    }
}
